
package org.sapra.abc;

import java.util.Iterator;
import java.util.List;
import nextapp.echo2.app.Alignment;
import nextapp.echo2.app.Border;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.Color;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Grid;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.PasswordField;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.SelectField;
import nextapp.echo2.app.Table;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.WindowPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.list.DefaultListModel;
import nextapp.echo2.app.table.DefaultTableModel;
import nextapp.echo2.app.table.TableModel;
import nextapp.echo2.extras.app.AccordionPane;
import nextapp.echo2.extras.app.layout.AccordionPaneLayoutData;
import org.sapra.dao.Empresa;
import org.sapra.dao.Usuario;
import org.sapra.dep.echo.CambioFecha.Aviso;
import org.sapra.echo.Helpers;
import org.sapra.echo.wAviso;
import org.sapra.logon.dLogin;
import org.sapra.main.vPrincipal;

/**
 *
 * @author cobain
 */

public class vUsuario extends nextapp.echo2.app.ContentPane {
    Column mParent=null;

    private TextField nombre;
    private TextField nom_usuario;
    private TextField email;
    private PasswordField pass1;
    private PasswordField pass2;
    private SelectField rol_u;
    private SelectField empresa;
    private Table tab_usuarios;
    private List<Usuario> mUsuarios;
    private Empresa emp;
    private DefaultListModel rol;
    private Usuario us=new Usuario();
    private Button alta;
    private Button baja;
    private Button editar;
    private Button guardar;
    private Button cancelar;
    private WindowPane ven;
    private Column col1;
    private vPrincipal princ;
    private Usuario mCurrent;
    Usuario resp;
    Grid acomodar=new Grid(2);
    //Usuario resp2;

    //REALIZAR LAS SECUENCIAS DE CONTROL
    public final static int ALTA = 1;
    public final static int EDITAR = 2;
    public static int accion;
    private Row row1,row2,row3,row4,row5,row6,row7,row8,row12;

    public vUsuario(vPrincipal princ){
        super();
        this.princ=princ;
        initComponents();
    }

        public vUsuario(Column parent){
        mParent = parent;
        initComponents();
    }

        void hidden(boolean opc){
        //row1.setVisible(opc);
        row2.setVisible(opc);
        /*row3.setVisible(opc);
        row4.setVisible(opc);
        row5.setVisible(opc);
        row6.setVisible(opc);
        row7.setVisible(opc);
        row8.setVisible(opc);
        row12.setVisible(opc);*/
    }
    private void initComponents(){


        if(mParent != null) col1 = mParent;
        else{
            col1 = Helpers.Column("Default", new Extent(5),this);
            Row x=princ.getMenu();
            x.setAlignment(Alignment.ALIGN_CENTER);
            col1.add(x);
        }
        col1.setInsets(new Insets(new Extent(250), new Extent(0), new Extent(250),new Extent(0)));

        //DATOS DEL USUARIO
        row1= Helpers.Row("Default", new Extent(5), col1);
        row1.setAlignment(Alignment.ALIGN_CENTER);
        Helpers.Label("DAR DE ALTA UN USUARIO. LLENAR LOS SIGUIENTES DATOS:", new Color(0x011dac), row1);
        row1.setAlignment(Alignment.ALIGN_CENTER);

        row2= Helpers.Row("Default", new Extent(5), col1);
        row2.setAlignment(Alignment.ALIGN_CENTER);
        Label nom= Helpers.Label("NOMBRE:", Color.BLACK, acomodar);
        nom.setTextAlignment(Alignment.ALIGN_RIGHT);
        nombre=Helpers.Text("", acomodar);
        nombre.setWidth(new Extent(300));

        //row3= Helpers.Row("Default", new Extent(5), col1);
        //row3.setAlignment(Alignment.ALIGN_CENTER);
        Label nom_u= Helpers.Label("NOMBRE USUARIO:", Color.BLACK, acomodar);
        nom_u.setTextAlignment(Alignment.ALIGN_RIGHT);
        nom_usuario=Helpers.Text("", acomodar);
        nom_usuario.setWidth(new Extent(300));

        //row4= Helpers.Row("Default", new Extent(5), col1);
        //row4.setAlignment(Alignment.ALIGN_CENTER);
        Label cont= Helpers.Label("CONTRASEÑA:", Color.BLACK, acomodar);
        cont.setTextAlignment(Alignment.ALIGN_RIGHT);
        pass1=new PasswordField();
        pass1.setWidth(new Extent(300));
        acomodar.add(pass1);

        //row5= Helpers.Row("Default", new Extent(5), col1);
        //row5.setAlignment(Alignment.ALIGN_CENTER);
        Label cont2= Helpers.Label("CONFIRMAR CONTRASEÑA:", Color.BLACK, acomodar);
        cont2.setTextAlignment(Alignment.ALIGN_RIGHT);
        pass2=new PasswordField();
        pass2.setWidth(new Extent(300));
        acomodar.add(pass2);

        //row6= Helpers.Row("Default", new Extent(5), col1);
        //row6.setAlignment(Alignment.ALIGN_CENTER);
        Label mail= Helpers.Label("E-MAIL:", Color.BLACK, acomodar);
        mail.setTextAlignment(Alignment.ALIGN_RIGHT);
        email=Helpers.Text("", acomodar);
        email.setWidth(new Extent(300));

        //ROL DEL USUARIO
        //row7= Helpers.Row("Default", new Extent(5), col1);
        //row7.setAlignment(Alignment.ALIGN_CENTER);
        Label rol= Helpers.Label("SELECCIONE ROL:", Color.BLACK, acomodar);
        rol.setTextAlignment(Alignment.ALIGN_RIGHT);
        rol_u=Helpers.SelectField(acomodar, new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if(rol_u.getSelectedIndex()<0){
                     add(new Aviso("Seleccione", "Favor de Seleccionar el rol del usuario"));
                     return;
                }
            }});
        rol_u.setWidth(new Extent(300));
        rol_u.setSelectedIndex(0);


        //EMPRESA
        //row8= Helpers.Row("Default", new Extent(5), col1);
        //row8.setAlignment(Alignment.ALIGN_CENTER);
        Label empr= Helpers.Label("SELECCIONE EMPRESA:", Color.BLACK, acomodar);
        empr.setTextAlignment(Alignment.ALIGN_RIGHT);

        //row12= Helpers.Row("Default", new Extent(5), col1);
        //row12.setAlignment(Alignment.ALIGN_CENTER);
        empresa=Helpers.SelectField(acomodar,new ActionListener(){public void actionPerformed(ActionEvent e) {Seleccion(e);}});
        empresa.setWidth(new Extent(600));
        empresa.setHeight(new Extent(20));
        Row rowb= Helpers.Row("Default", new Extent(5), col1);
       guardar=Helpers.Button("GUARDAR",rowb, new ActionListener(){public void actionPerformed(ActionEvent e) {MenuGuardar(e);}});
       cancelar=Helpers.Button("CANCELAR",rowb, new ActionListener(){public void actionPerformed(ActionEvent e) {MenuCancelar(e);}});
       guardar.setVisible(false);
       cancelar.setVisible(false);
       rowb.setAlignment(Alignment.ALIGN_CENTER);
       //LISTA DE USUARIOS
       Row row9= Helpers.Row("Default", new Extent(5), col1);
       row9.setAlignment(Alignment.ALIGN_CENTER);
       Helpers.Label("LISTADO DE USUARIOS",new Color(0x011dac), row9);
       row9.setAlignment(Alignment.ALIGN_CENTER);

       Row row10= Helpers.Row("Default", new Extent(5), col1);
       row10.setAlignment(Alignment.ALIGN_CENTER);
       tab_usuarios=Helpers.Tabla();
       row10.add(tab_usuarios);
       row10.setAlignment(Alignment.ALIGN_CENTER);

       /*acomodar.setSize(2);
       acomodar.add(nom);
       acomodar.add(nombre);
       acomodar.add(nom_u);
       acomodar.add(nom_usuario);
       acomodar.add(cont);
       acomodar.add(pass1);
       acomodar.add(cont2);
       acomodar.add(pass2);
       acomodar.add(mail);
       acomodar.add(email);
       acomodar.add(rol);
       acomodar.add(rol_u);
       acomodar.add(empr);
       acomodar.add(empresa);*/
       acomodar.setBorder(new Border(new Extent(5), Color.BLUE, 4));
       acomodar.setHeight(new Extent(200));
       acomodar.setWidth(new Extent(700));
       acomodar.setInsets(new Insets(new Extent(5)));
       row2.add(acomodar);
       //BOTONES DE ACCION, ALTA, BAJA, EDITAR, GUARDAR, CANCELAR
       Column col_b=new Column();
       alta=Helpers.Button2("ALTA", new ActionListener(){public void actionPerformed(ActionEvent e) {MenuAlta(e);}});
       editar=Helpers.Button2("EDITAR", new ActionListener(){public void actionPerformed(ActionEvent e) {MenuEditar(e);}});
       baja=Helpers.Button2("BAJA", new ActionListener(){public void actionPerformed(ActionEvent e) {MenuBaja(e);}});
       

        col_b.add(alta);
        col_b.add(baja);
        col_b.add(editar);

        col_b.setCellSpacing(new Extent(5));
        col_b.setInsets(new Insets(new Extent(10)));

        AccordionPane ac=new AccordionPane();
        AccordionPaneLayoutData layoutdata=new AccordionPaneLayoutData();
        layoutdata.setTitle("OPCIONES");

        col_b.setLayoutData(layoutdata);
        AccordionPaneLayoutData layoutData2 = new AccordionPaneLayoutData();
        ac.add(col_b);

        ven=Helpers.Window("MENU USUARIOS");
        ven.setHeight(new Extent(185));
        ven.setWidth(new Extent(185));
        ven.setPositionY(new Extent(0));
        ven.setPositionX(new Extent(5));
        ven.setClosable(false);
        ven.setMovable(true);
        ven.add(ac);
        add(ven);
       

       setRol();
       FirstTime();
       hidden(false);

    }
    private void habilitado(boolean opc){
            nombre.setEnabled(opc);
            nom_usuario.setEnabled(opc);
            email.setEnabled(opc);
            pass1.setEnabled(opc);
            pass2.setEnabled(opc);
            rol_u.setEnabled(opc);
            empresa.setEnabled(opc);
    }
    void FirstTime(){
            UpdateView();
    }

    void UpdateView(){
        UpdateList(0);
        habilitado(false);
        mUsuarios =dUsuario.getUsuario(0,null);
        tab_usuarios.setModel(getModel());
        tab_usuarios.setDefaultRenderer(Object.class,new TableCell());
        tab_usuarios.setDefaultHeaderRenderer(new HeaderTable());
        rol_u.setSelectedIndex(0);

      }
   private List<Empresa> empresas2;
     private void UpdateList(int opc) {
        //Actualiza la Lista
        empresas2 = dEmpresa.getEmpresas(-1);
        empresa.setModel(new DefaultListModel(empresas2.toArray()));
        empresa.setEnabled(true);
        emp=dLogin.getEmpresa();
        empresa.setSelectedItem(new Empresa(emp.getEmpresaId()));
        if(opc==0)
            emp = new Empresa();
    }

       void Seleccion(ActionEvent e){

        emp = (Empresa) empresa.getSelectedItem();
        if(emp == null) return;
    }

       public void setRol(){
        rol=new DefaultListModel();
        rol.add("SELECCIONE");
        rol.add("ADMINISTRADOR");
        rol.add("EMPRESA");
        rol.add("GRUPO");
        rol.add("CORPORATIVO");
        rol_u.setModel(rol);

       }

         public void CleanFields(){
         nombre.setText("");
           nom_usuario.setText("");
           email.setText("");
           pass1.setText("");
           pass2.setText("");

           //LISTAS
           empresa.setSelectedIndex(-1);
           rol_u.setSelectedItem(us.getTipoUsuario());


       }


       private TableModel getModel() {
        DefaultTableModel tm = new DefaultTableModel(4,0);
        int c=0;

        tm.setColumnName(c++, "NOMBRE");
        tm.setColumnName(c++, "EMPRESA");
        tm.setColumnName(c++, "NOMBRE USUARIO");
        tm.setColumnName(c++, "ROL");
        Iterator it = mUsuarios.iterator();
        Object[] item = {null,null,null, null,null};
        
        while(it.hasNext()){
            int i=0;
            Usuario us2 = (Usuario) it.next();
            item[i++] = us2.getNombre();
            item[i++] = us2.getEmpresa();
            item[i++] = us2.getLogin();
            item[i++] = us2.getTipoUsuario();
            tm.addRow(item);
        }

        return tm;
    }

       private void setUsuario(Usuario us){

           nombre.setText(us.getNombre());
           nom_usuario.setText(us.getLogin());
           email.setText(us.getEmail());
           pass1.setText(us.getPassword());
           pass2.setText(us.getPassword());

           //LISTAS
           empresa.setSelectedItem(new Empresa(us.getFk_empresaId()));
           emp=(Empresa)empresa.getSelectedItem();
           rol_u.setSelectedItem(us.getTipoUsuario());

       }

       private Usuario getCampos(){

          Usuario resp1=new Usuario();

        if(mCurrent == null) resp1.setUsuarioId(-1); // Lo indica como uno nuevo
        else
              
            resp1.setUsuarioId(mCurrent.getUsuarioId());

           if(pass1.getText().equals(pass2.getText())){
              resp1.setPassword(pass1.getText());
           }
           //TODOS LOS CAMṔOS TEXTO
           resp1.setNombre(nombre.getText());
           resp1.setLogin(nom_usuario.getText());
           resp1.setPassword(pass1.getText());
           resp1.setEmail(email.getText());

           //LISTAS
           String t_u="";
           if(rol_u.getSelectedItem().toString().equals("ADMINISTRADOR")) t_u="A";
           if(rol_u.getSelectedItem().toString().equals("EMPRESA")) t_u="E";
           if(rol_u.getSelectedItem().toString().equals("GRUPO")) t_u="G";
           if(rol_u.getSelectedItem().toString().equals("CORPORATIVO")) t_u="C";
           resp1.setTipoUsuario(t_u);


           resp1.setFk_empresaId(emp.getEmpresaId());

           return resp1;
       }

       /* public void setEditar(boolean val){//ESTABLECE LOS CAMPOS A EDITAR
           nombre.setEnabled(val);
           email.setEnabled(val);
           rol_u.setEnabled(val);
           empresa.setEnabled(val);

       }*/

       public void MenuAlta(ActionEvent e){
           habilitado(true);
           hidden(true);
           guardar.setVisible(true);
           cancelar.setVisible(true);
           accion=ALTA;
           //setEditar(true);
           CleanFields();
       }

       public void MenuEditar(ActionEvent e){
           habilitado(true);
           hidden(true);
           guardar.setVisible(true);
           cancelar.setVisible(true);
           //setEditar(false);
           accion=EDITAR;

            int sel = tab_usuarios.getSelectionModel().getMinSelectedIndex();
            if(sel < 0)return; // No hay seleccion
            Usuario resp3= mUsuarios.get(sel);
            setUsuario(resp3);
            mCurrent=resp3;

            nombre.setText(resp3.getNombre());
            nom_usuario.setText(resp3.getLogin());
            pass1.setText(resp3.getPassword());
            pass2.setText(resp3.getPassword());
            email.setText(resp3.getEmail());

            char selCar=resp3.getTipoUsuario().trim().charAt(0);
            switch(selCar){
                case 'A':rol_u.setSelectedIndex(1);break;
                case 'E':rol_u.setSelectedIndex(2);break;
                case 'G':rol_u.setSelectedIndex(3);break;
                case 'C':rol_u.setSelectedIndex(4);break;
            }
            for(int i=0;i<empresas2.size();i++){
                Empresa emp2=(Empresa)empresas2.get(i);
                if(emp2.getEmpresaId()==resp3.getFk_empresaId())
                    empresa.setSelectedItem(emp2);
           }
       }

        public void MenuBaja(ActionEvent e){
            if(tab_usuarios.getSelectionModel().getMinSelectedIndex()>=0){
                Usuario us2=(Usuario)mUsuarios.get(tab_usuarios.getSelectionModel().getMinSelectedIndex());
                if(dUsuario.bajaUsuario(us2)==-1){
                    add(new wAviso("Error", "El Usuario No se puede eliminar (tiene alguna relacion)"));
                    
                }else{
                    add(new wAviso("Error", "Usuario Dado de Baja Correctamente"));
                    UpdateView();
                    return ;
                }

            }else{
                 add(new wAviso("Error", "FAVOR DE SELECCIONAR UN USUARIO"));
            }
             //add(new wAviso("Error", mCurrent.toString()));
       }

        public void MenuCancelar(ActionEvent e){
            hidden(false);
            guardar.setVisible(false);
            cancelar.setVisible(false);
           CleanFields();
            
        }
        public void MenuGuardar(ActionEvent e){
        //setEditar(true);
        
        String msj=null;
        msj=Validar();
        if(msj!=null){
             add(new wAviso("Error", msj));
             return ;
        }
           
        Usuario us2=getCampos();
        int uid=-1;
        if(accion==ALTA){
               uid=dUsuario.NuevoUsuario(us2);
                if( uid <= 0){
                        //Error al guardar al usuario
                        add(new wAviso("ERROR","ERROR AL GUARDAR AL USUARIO"));
                        return;
                    }
                else{
                    add(new wAviso("Exito!!!","USUARIO GUARDADO CORRECTAMENTE"));
                }

           }else if(accion==EDITAR){
               uid=dUsuario.editarUsuario(us2);
                if( uid <= 0){
                        //Error al guardar al usuario
                        add(new wAviso("ERROR","ERROR AL GUARDAR AL USUARIO"));
                        return;
                    }
               else{
                    add(new wAviso("Exito!!!","USUARIO MODIFICADO CORRECTAMENTE"));
                }
               System.out.println(dUsuario.editarUsuario(us2));

           }
          hidden(false);
          guardar.setVisible(false);
          cancelar.setVisible(false);
          CleanFields();
          UpdateView();

            
        }

        private String Validar(){

        String msj1="Formato Erroneo para ";
        String msj2="Favor de Seleccionar una Opcion de ";
        String msj3="Favor de Llenar el campo";
        

         if(nombre.getText().trim().equals(""))return msj3+" NOMBRE";
         if(nom_usuario.getText().trim().equals(""))return msj1+" NOMBRE USUARIO";
         if(pass1.getText().trim().equals(""))return msj1+" CONTRASEÑA";
         if(pass2.getText().trim().equals(""))return msj1+" CONFIRMAR CONTRASEÑA";
         if(email.getText().trim().equals(""))return msj3+" E-MAIL";
         if(rol_u.getSelectedIndex()<0)return msj2+" ROL DE USUARIO";
         if(empresa.getSelectedIndex()<0)return msj2+" EMPRESA";
        
         if(accion==ALTA){
             List<Usuario> userList=dUsuario.getUsuario(1, nom_usuario.getText().trim());
              if(userList.size()>0)return " YA EXISTE ESE NOMBRE DE USUARIO";
         }
               
         if(pass1.getText().trim().length()<5)return "El Password debe ser mayor a 5 Caracteres";
         
           if(pass1.getText().trim().equals(pass2.getText().trim())){}
            else
                return msj1+"CONTRASEÑAS(deben ser iguales)";
                return null;
            }

 
}


